package br.com.beautycenter.DAO;

import br.com.beautycenter.bean.Cargo;
import br.com.beautycenter.bean.Funcionario;
import br.com.beautycenter.hibernateUtil.DaoBase;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;

public class PersisteFuncionario extends DaoBase<Funcionario> { 
    public List<Funcionario> retornarFuncionario(){
        try {
            return findAll();
        } catch (Exception ex) {
            
            return new ArrayList<Funcionario>();
        }
    }
    
    public List<Funcionario> retornarFuncionariosAtivos(){
        Query query = getEntityManager().createQuery("FROM Funcionario f WHERE f.ativo=:ativo");
        query.setParameter("ativo", true);
        
        try{
            return query.getResultList();
        }catch(Exception ex){
            return new ArrayList<Funcionario>();
        }
    }
    
    public Funcionario retornarFuncionarioPeloID(Funcionario funcionario){
        return getEntityManager().find(Funcionario.class, funcionario.getIdPessoa());
    }
    
    public List<Funcionario> retornarFuncionarioPeloNome(Funcionario funcionario){
        Query query = getEntityManager().createQuery("FROM Funcionario f WHERE f.nome LIKE :nome");
        query.setParameter("nome", "%"+funcionario.getNome()+"%");
        
        try{
           return query.getResultList(); 
        }catch(Exception ex){
            return new ArrayList<Funcionario>();
        }
    }
    
    public Funcionario retornarFuncionarioPeloCPF(Funcionario funcionario){
        Query query = getEntityManager().createQuery("FROM Funcionario f WHERE f.cpf=:cpf");
        query.setParameter("cpf", funcionario.getCpf());
        
        try{
            return (Funcionario) query.getSingleResult();
        }catch(Exception ex){
            return null;
        }
    }
    public Funcionario retornarFuncionarioPeloLogin(Funcionario funcionario){
        Query query = getEntityManager().createQuery("FROM Funcionario f WHERE f.login=:login");
        query.setParameter("login", funcionario.getLogin());
        
        try{
            return (Funcionario) query.getSingleResult();
        }catch(Exception ex){
            return null;
        }
    }
    
    public int retornarMaxID(){
        Query query = getEntityManager().createQuery("SELECT MAX(f.idPessoa) FROM Funcionario f");
        
        try{
            return Integer.valueOf(query.getSingleResult().toString());
        }catch (Exception ex){
            return -1;
        }
    }
    
    /**
     * Método que será usado pra listar todos os médicos no cadastro de paciente.
     * @param cargo
     * @return 
     */
    public List<Funcionario> retornarFuncionariosPeloCargo(Cargo cargo){
        Query query = getEntityManager().createQuery("FROM Funcionario f WHERE f.cargo.nomeCargo=:cargo");
        query.setParameter("cargo", cargo.getNomeCargo());
        
        try{
            return query.getResultList();
        }catch (Exception ex){
            return new ArrayList<Funcionario>();
        }
    }
    
    public List<Funcionario> retornarFuncionariosRegistro(){
        Query query = getEntityManager().createQuery("FROM Funcionario f WHERE f.registro is not null");
        //query.setParameter("registro", true);
        
        try{
            return query.getResultList();
        }catch(Exception ex){
            return new ArrayList<Funcionario>();
        }
    }
    
    public void salvar(Funcionario funcionario){
        save(funcionario);
    }
    
    public void atualizar(Funcionario funcionario){
        update(funcionario);
    }
    
    public Funcionario retornarFuncionarioLogin(Funcionario funcionario){
       Query query = getEntityManager().createQuery("FROM Funcionario f WHERE f.login=:login and f.senha=:senha");
       query.setParameter("login", funcionario.getLogin());
       query.setParameter("senha", funcionario.getSenha());

       try{
           return (Funcionario) query.getSingleResult();
       }catch(Exception ex){
           return null;
       }
   }
}